package com.suning.sawp.intf.mainpush;

import java.io.File;
import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.Sheet;

import com.suning.sawp.po.mainpush.RegionCommodityTask;
import com.suning.sawp.po.mainpush.StoreCommodityTask;
import com.suning.sawp.po.mainpush.TaskRegion;
import com.suning.sawp.po.mainpush.TaskStore;

/**
 * 
 * 〈主推处理层〉<br>
 * 〈功能详细描述〉
 *
 * @author 12061748
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public interface MainPushService {

    /**
     * 
     * 功能描述:分页查询大区任务列表 <br>
     * 〈功能详细描述〉
     *
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Map<String, Object> queryRegionMainPushList(String regionCode, String taskTopic, String startTime, String endTime,
            Integer pageNo, Integer pageLimit);

    /**
     * 
     * 功能描述:查询大区任务详情 <br>
     * 〈功能详细描述〉
     *
     * @param taskNo
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    TaskRegion queryRegionTaskDetail(String taskNo);

    /**
     * 
     * 功能描述: 分页查询门店商品任务列表 <br>
     * 〈功能详细描述〉
     *
     * @param regionCode
     * @param taskNo
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Map<String, Object> queryStoreTaskCommList(String taskNo, String commClassifyCode);

    /**
     * 
     * 功能描述:生成大区下面各个门店各个商品的文件 <br>
     * 〈功能详细描述〉
     *
     * @param regionCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    File storeAssignExport(String regionCode, String taskNo);

    /**
     * 
     * 功能描述:导入 <br>
     * 〈功能详细描述〉
     *
     * @param sheet
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Map<String, Object> storeAssignImport(Sheet sheet, String taskNo, String regionCode);

    /**
     * 
     * 功能描述:获取大区下任务商品集合 <br>
     * 〈功能详细描述〉
     *
     * @param regionCode
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<RegionCommodityTask> getRegionCommodityTaskList(String taskNo);

    /**
     * 
     * 功能描述: 查询大区商品某一型号的任务详情<br>
     * 〈功能详细描述〉
     *
     * @param taskNo
     * @param commClassifyCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    RegionCommodityTask getRegionCommodityTaskDetail(String taskNo, String commClassifyCode);

    /**
     * 
     * 功能描述: 查询大区任务列表<br>
     * 〈功能详细描述〉
     *
     * @param taskNo
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Map<String, Object> queryRegionTaskCommList(String taskNo, Integer start, Integer limit);

    /**
     * 
     * 功能描述: 获取大区任务商品表的商品名称集合以及类型的销售目标总计<br>
     * 〈功能详细描述〉
     *
     * @param taskNo
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<Map<String, Object>> getRegionCommodityNameAndNumListExceptIsAssigned(String taskNo);

    /**
     * 
     * 功能描述: 生成门店任务<br>
     * 〈功能详细描述〉
     *
     * @param task
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Long saveTaskStore(TaskStore task);

    /**
     * 
     * 功能描述: 生成门店商品任务<br>
     * 〈功能详细描述〉
     *
     * @param sct
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Long saveStoreCommTask(StoreCommodityTask sct);

    /**
     * 
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param taskNo
     * @param storeList
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Map<String, Object> upsertStoreCommTask(String taskNo, String commClassifyCode, List<StoreCommodityTask> storeList,
            String optStaffCode);

    /**
     * 
     * 功能描述: 查询大区商品任务目标数量总和和已完成数目总和<br>
     * 〈功能详细描述〉
     *
     * @param regionTask
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    TaskRegion queryRegionCommDestSum(TaskRegion regionTask);

    /**
     * 
     * 功能描述:通过门店商品表id更新目标总数 <br>
     * 〈功能详细描述〉
     *
     * @param sct
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void updateStoreCommodityDestNumById(StoreCommodityTask sct);

    /**
     * 
     * 功能描述:通过任务编码更新大区任务状态 <br>
     * 〈功能详细描述〉
     *
     * @param task
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void updateRegionTaskAssignStatusByTaskNo(String taskNo, String assignStatus);

    /**
     * 
     * 功能描述: 通过任务编码更新大区商品任务状态<br>
     * 〈功能详细描述〉
     *
     * @param classifyCode
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void updateRegionCommAssignStatusByClassifyCode(String taskNo, Integer classifyCode, String assignStatus,
            String commStatus);

    /**
     * 
     * 功能描述:查询主推任务操作日志 <br>
     * 〈功能详细描述〉
     *
     * @param taskNo
     * @param startTime
     * @param endTime
     * @param pageNo
     * @param pageLimit
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Map<String, Object> queryOperationLog(String taskNo, String startTime, String endTime, Integer start, Integer limit);

    /**
     * 
     * 功能描述:导出完成情况 <br>
     * 〈功能详细描述〉
     *
     * @param taskNo
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    File exportCompltInfo(List<String> taskNo, Boolean isHq);

    /**
     * 
     * 功能描述: 查询出当前任务下分配状态为未分配的归类编码集<br>
     * 〈功能详细描述〉
     *
     * @param taskNo
     * @param assignStatus
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<String> queryCommClassifyListByTaskNo(String taskNo, String assignStatus, String commStatus);

    /**
     * 
     * 功能描述:查询大区商品表某个任务不是已分配的任务数量 <br>
     * 〈功能详细描述〉
     *
     * @param taskNo
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    long queryCommRegionTaskUnAssignedNum(String taskNo, String assignStatus);

    /**
     * 
     * 功能描述: 通过大区任务编码和门店编码查询门店任务<br>
     * 〈功能详细描述〉
     *
     * @param taskNo
     * @param orgCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    TaskStore queryStoreTaskInfoByParTaskNo(String taskNo, String orgCode);
    
    /**
     * 
     * 功能描述: 查询大区下本月的主推商品编码<br>
     * 〈功能详细描述〉
     *
     * @param regionCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<String> queryCommCdsInRegion(String regionCode, String cateCode);
    
}
